# services/order_service.py

# 国家代码到中文名称的映射
COUNTRY_CODES_TO_NAMES = {
    'AF': '阿富汗',
    'AX': '奥兰群岛',
    'AL': '阿尔巴尼亚',
    'DZ': '阿尔及利亚',
    'AS': '美属萨摩亚',
    'AD': '安道尔',
    'AO': '安哥拉',
    'AI': '安圭拉',
    'AQ': '南极洲',
    'AG': '安提瓜和巴布达',
    'AR': '阿根廷',
    'AM': '亚美尼亚',
    'AW': '阿鲁巴',
    'AU': '澳大利亚',
    'AT': '奥地利',
    'AZ': '阿塞拜疆',
    'BS': '巴哈马',
    'BH': '巴林',
    'BD': '孟加拉国',
    'BB': '巴巴多斯',
    'BY': '白俄罗斯',
    'BE': '比利时',
    'BZ': '伯利兹',
    'BJ': '贝宁',
    'BM': '百慕大',
    'BT': '不丹',
    'BO': '玻利维亚',
    'BQ': '荷兰加勒比区',
    'BA': '波斯尼亚和黑塞哥维那',
    'BW': '博茨瓦纳',
    'BV': '布韦岛',
    'BR': '巴西',
    'IO': '英属印度洋领地',
    'BN': '文莱',
    'BG': '保加利亚',
    'BF': '布基纳法索',
    'BI': '布隆迪',
    'CV': '佛得角',
    'KH': '柬埔寨',
    'CM': '喀麦隆',
    'CA': '加拿大',
    'KY': '开曼群岛',
    'CF': '中非共和国',
    'TD': '乍得',
    'CL': '智利',
    'CN': '中国',
    'CX': '圣诞岛',
    'CC': '科科斯（基林）群岛',
    'CO': '哥伦比亚',
    'KM': '科摩罗',
    'CG': '刚果（布）',
    'CD': '刚果（金）',
    'CK': '库克群岛',
    'CR': '哥斯达黎加',
    'CI': '科特迪瓦',
    'HR': '克罗地亚',
    'CU': '古巴',
    'CW': '库拉索',
    'CY': '塞浦路斯',
    'CZ': '捷克',
    'DK': '丹麦',
    'DJ': '吉布提',
    'DM': '多米尼克',
    'DO': '多米尼加共和国',
    'EC': '厄瓜多尔',
    'EG': '埃及',
    'SV': '萨尔瓦多',
    'GQ': '赤道几内亚',
    'ER': '厄立特里亚',
    'EE': '爱沙尼亚',
    'ET': '埃塞俄比亚',
    'FK': '福克兰群岛',
    'FO': '法罗群岛',
    'FJ': '斐济',
    'FI': '芬兰',
    'FR': '法国',
    'GF': '法属圭亚那',
    'PF': '法属波利尼西亚',
    'TF': '法属南方和南极领地',
    'GA': '加蓬',
    'GM': '冈比亚',
    'GE': '格鲁吉亚',
    'DE': '德国',
    'GH': '加纳',
    'GI': '直布罗陀',
    'GR': '希腊',
    'GL': '格陵兰',
    'GD': '格林纳达',
    'GP': '瓜德罗普',
    'GU': '关岛',
    'GT': '危地马拉',
    'GG': '根西',
    'GN': '几内亚',
    'GW': '几内亚比绍',
    'GY': '圭亚那',
    'HT': '海地',
    'HM': '赫德岛和麦克唐纳群岛',
    'VA': '梵蒂冈',
    'HN': '洪都拉斯',
    'HK': '香港',
    'HU': '匈牙利',
    'IS': '冰岛',
    'IN': '印度',
    'ID': '印度尼西亚',
    'IR': '伊朗',
    'IQ': '伊拉克',
    'IE': '爱尔兰',
    'IM': '马恩岛',
    'IL': '以色列',
    'IT': '意大利',
    'JM': '牙买加',
    'JP': '日本',
    'JE': '泽西',
    'JO': '约旦',
    'KZ': '哈萨克斯坦',
    'KE': '肯尼亚',
    'KI': '基里巴斯',
    'KP': '朝鲜',
    'KR': '韩国',
    'KW': '科威特',
    'KG': '吉尔吉斯斯坦',
    'LA': '老挝',
    'LV': '拉脱维亚',
    'LB': '黎巴嫩',
    'LS': '莱索托',
    'LR': '利比里亚',
    'LY': '利比亚',
    'LI': '列支敦士登',
    'LT': '立陶宛',
    'LU': '卢森堡',
    'MO': '澳门',
    'MK': '北马其顿',
    'MG': '马达加斯加',
    'MW': '马拉维',
    'MY': '马来西亚',
    'MV': '马尔代夫',
    'ML': '马里',
    'MT': '马耳他',
    'MH': '马绍尔群岛',
    'MQ': '马提尼克',
    'MR': '毛里塔尼亚',
    'MU': '毛里求斯',
    'YT': '马约特',
    'MX': '墨西哥',
    'FM': '密克罗尼西亚',
    'MD': '摩尔多瓦',
    'MC': '摩纳哥',
    'MN': '蒙古',
    'ME': '黑山',
    'MS': '蒙特塞拉特',
    'MA': '摩洛哥',
    'MZ': '莫桑比克',
    'MM': '缅甸',
    'NA': '纳米比亚',
    'NR': '瑙鲁',
    'NP': '尼泊尔',
    'NL': '荷兰',
    'NC': '新喀里多尼亚',
    'NZ': '新西兰',
    'NI': '尼加拉瓜',
    'NE': '尼日尔',
    'NG': '尼日利亚',
    'NU': '纽埃',
    'NF': '诺福克岛',
    'MP': '北马里亚纳群岛',
    'NO': '挪威',
    'OM': '阿曼',
    'PK': '巴基斯坦',
    'PW': '帕劳',
    'PS': '巴勒斯坦',
    'PA': '巴拿马',
    'PG': '巴布亚新几内亚',
    'PY': '巴拉圭',
    'PE': '秘鲁',
    'PH': '菲律宾',
    'PN': '皮特凯恩群岛',
    'PL': '波兰',
    'PT': '葡萄牙',
    'PR': '波多黎各',
    'QA': '卡塔尔',
    'RE': '留尼汪',
    'RO': '罗马尼亚',
    'RU': '俄罗斯',
    'RW': '卢旺达',
    'BL': '圣巴泰勒米',
    'SH': '圣赫勒拿、阿森松和特里斯坦-达库尼亚',
    'KN': '圣基茨和尼维斯',
    'LC': '圣卢西亚',
    'MF': '法属圣马丁',
    'PM': '圣皮埃尔和密克隆',
    'VC': '圣文森特和格林纳丁斯',
    'WS': '萨摩亚',
    'SM': '圣马力诺',
    'ST': '圣多美和普林西比',
    'SA': '沙特阿拉伯',
    'SN': '塞内加尔',
    'RS': '塞尔维亚',
    'SC': '塞舌尔',
    'SL': '塞拉利昂',
    'SG': '新加坡',
    'SX': '荷属圣马丁',
    'SK': '斯洛伐克',
    'SI': '斯洛文尼亚',
    'SB': '所罗门群岛',
    'SO': '索马里',
    'ZA': '南非',
    'GS': '南乔治亚和南桑威奇群岛',
    'SS': '南苏丹',
    'ES': '西班牙',
    'LK': '斯里兰卡',
    'SD': '苏丹',
    'SR': '苏里南',
    'SJ': '斯瓦尔巴和扬马延',
    'SZ': '斯威士兰',
    'SE': '瑞典',
    'CH': '瑞士',
    'SY': '叙利亚',
    'TW': '台湾',
    'TJ': '塔吉克斯坦',
    'TZ': '坦桑尼亚',
    'TH': '泰国',
    'TL': '东帝汶',
    'TG': '多哥',
    'TK': '托克劳',
    'TO': '汤加',
    'TT': '特立尼达和多巴哥',
    'TN': '突尼斯',
    'TR': '土耳其',
    'TM': '土库曼斯坦',
    'TC': '特克斯和凯科斯群岛',
    'TV': '图瓦卢',
    'UG': '乌干达',
    'UA': '乌克兰',
    'AE': '阿联酋',
    'GB': '英国',
    'US': '美国',
    'UM': '美国本土外小岛屿',
    'UY': '乌拉圭',
    'UZ': '乌兹别克斯坦',
    'VU': '瓦努阿图',
    'VE': '委内瑞拉',
    'VN': '越南',
    'VG': '英属维尔京群岛',
    'VI': '美属维尔京群岛',
    'WF': '瓦利斯和富图纳',
    'EH': '西撒哈拉',
    'YE': '也门',
    'ZM': '赞比亚',
    'ZW': '津巴布韦'
}

# 国家代码到国际电话区号的映射
COUNTRY_CODES_TO_PHONE_PREFIX = {
    'AF': '+93',     # 阿富汗
    'AX': '+358',    # 奥兰群岛
    'AL': '+355',    # 阿尔巴尼亚
    'DZ': '+213',    # 阿尔及利亚
    'AS': '+1',      # 美属萨摩亚
    'AD': '+376',    # 安道尔
    'AO': '+244',    # 安哥拉
    'AI': '+1',      # 安圭拉
    'AQ': '+672',    # 南极洲
    'AG': '+1',      # 安提瓜和巴布达
    'AR': '+54',     # 阿根廷
    'AM': '+374',    # 亚美尼亚
    'AW': '+297',    # 阿鲁巴
    'AU': '+61',     # 澳大利亚
    'AT': '+43',     # 奥地利
    'AZ': '+994',    # 阿塞拜疆
    'BS': '+1',      # 巴哈马
    'BH': '+973',    # 巴林
    'BD': '+880',    # 孟加拉国
    'BB': '+1',      # 巴巴多斯
    'BY': '+375',    # 白俄罗斯
    'BE': '+32',     # 比利时
    'BZ': '+501',    # 伯利兹
    'BJ': '+229',    # 贝宁
    'BM': '+1',      # 百慕大
    'BT': '+975',    # 不丹
    'BO': '+591',    # 玻利维亚
    'BQ': '+599',    # 荷兰加勒比区
    'BA': '+387',    # 波斯尼亚和黑塞哥维那
    'BW': '+267',    # 博茨瓦纳
    'BV': '+47',     # 布韦岛
    'BR': '+55',     # 巴西
    'IO': '+246',    # 英属印度洋领地
    'BN': '+673',    # 文莱
    'BG': '+359',    # 保加利亚
    'BF': '+226',    # 布基纳法索
    'BI': '+257',    # 布隆迪
    'CV': '+238',    # 佛得角
    'KH': '+855',    # 柬埔寨
    'CM': '+237',    # 喀麦隆
    'CA': '+1',      # 加拿大
    'KY': '+1',      # 开曼群岛
    'CF': '+236',    # 中非共和国
    'TD': '+235',    # 乍得
    'CL': '+56',     # 智利
    'CN': '+86',     # 中国
    'CX': '+61',     # 圣诞岛
    'CC': '+61',     # 科科斯（基林）群岛
    'CO': '+57',     # 哥伦比亚
    'KM': '+269',    # 科摩罗
    'CG': '+242',    # 刚果（布）
    'CD': '+243',    # 刚果（金）
    'CK': '+682',    # 库克群岛
    'CR': '+506',    # 哥斯达黎加
    'CI': '+225',    # 科特迪瓦
    'HR': '+385',    # 克罗地亚
    'CU': '+53',     # 古巴
    'CW': '+599',    # 库拉索
    'CY': '+357',    # 塞浦路斯
    'CZ': '+420',    # 捷克
    'DK': '+45',     # 丹麦
    'DJ': '+253',    # 吉布提
    'DM': '+1',      # 多米尼克
    'DO': '+1',      # 多米尼加共和国
    'EC': '+593',    # 厄瓜多尔
    'EG': '+20',     # 埃及
    'SV': '+503',    # 萨尔瓦多
    'GQ': '+240',    # 赤道几内亚
    'ER': '+291',    # 厄立特里亚
    'EE': '+372',    # 爱沙尼亚
    'ET': '+251',    # 埃塞俄比亚
    'FK': '+500',    # 福克兰群岛
    'FO': '+298',    # 法罗群岛
    'FJ': '+679',    # 斐济
    'FI': '+358',    # 芬兰
    'FR': '+33',     # 法国
    'GF': '+594',    # 法属圭亚那
    'PF': '+689',    # 法属波利尼西亚
    'TF': '+262',    # 法属南方和南极领地
    'GA': '+241',    # 加蓬
    'GM': '+220',    # 冈比亚
    'GE': '+995',    # 格鲁吉亚
    'DE': '+49',     # 德国
    'GH': '+233',    # 加纳
    'GI': '+350',    # 直布罗陀
    'GR': '+30',     # 希腊
    'GL': '+299',    # 格陵兰
    'GD': '+1',      # 格林纳达
    'GP': '+590',    # 瓜德罗普
    'GU': '+1',      # 关岛
    'GT': '+502',    # 危地马拉
    'GG': '+44',     # 根西
    'GN': '+224',    # 几内亚
    'GW': '+245',    # 几内亚比绍
    'GY': '+592',    # 圭亚那
    'HT': '+509',    # 海地
    'HM': '+672',    # 赫德岛和麦克唐纳群岛
    'VA': '+379',    # 梵蒂冈
    'HN': '+504',    # 洪都拉斯
    'HK': '+852',    # 香港
    'HU': '+36',     # 匈牙利
    'IS': '+354',    # 冰岛
    'IN': '+91',     # 印度
    'ID': '+62',     # 印度尼西亚
    'IR': '+98',     # 伊朗
    'IQ': '+964',    # 伊拉克
    'IE': '+353',    # 爱尔兰
    'IM': '+44',     # 马恩岛
    'IL': '+972',    # 以色列
    'IT': '+39',     # 意大利
    'JM': '+1',      # 牙买加
    'JP': '+81',     # 日本
    'JE': '+44',     # 泽西
    'JO': '+962',    # 约旦
    'KZ': '+7',      # 哈萨克斯坦
    'KE': '+254',    # 肯尼亚
    'KI': '+686',    # 基里巴斯
    'KP': '+850',    # 朝鲜
    'KR': '+82',     # 韩国
    'KW': '+965',    # 科威特
    'KG': '+996',    # 吉尔吉斯斯坦
    'LA': '+856',    # 老挝
    'LV': '+371',    # 拉脱维亚
    'LB': '+961',    # 黎巴嫩
    'LS': '+266',    # 莱索托
    'LR': '+231',    # 利比里亚
    'LY': '+218',    # 利比亚
    'LI': '+423',    # 列支敦士登
    'LT': '+370',    # 立陶宛
    'LU': '+352',    # 卢森堡
    'MO': '+853',    # 澳门
    'MK': '+389',    # 北马其顿
    'MG': '+261',    # 马达加斯加
    'MW': '+265',    # 马拉维
    'MY': '+60',     # 马来西亚
    'MV': '+960',    # 马尔代夫
    'ML': '+223',    # 马里
    'MT': '+356',    # 马耳他
    'MH': '+692',    # 马绍尔群岛
    'MQ': '+596',    # 马提尼克
    'MR': '+222',    # 毛里塔尼亚
    'MU': '+230',    # 毛里求斯
    'YT': '+262',    # 马约特
    'MX': '+52',     # 墨西哥
    'FM': '+691',    # 密克罗尼西亚
    'MD': '+373',    # 摩尔多瓦
    'MC': '+377',    # 摩纳哥
    'MN': '+976',    # 蒙古
    'ME': '+382',    # 黑山
    'MS': '+1',      # 蒙特塞拉特
    'MA': '+212',    # 摩洛哥
    'MZ': '+258',    # 莫桑比克
    'MM': '+95',     # 缅甸
    'NA': '+264',    # 纳米比亚
    'NR': '+674',    # 瑙鲁
    'NP': '+977',    # 尼泊尔
    'NL': '+31',     # 荷兰
    'NC': '+687',    # 新喀里多尼亚
    'NZ': '+64',     # 新西兰
    'NI': '+505',    # 尼加拉瓜
    'NE': '+227',    # 尼日尔
    'NG': '+234',    # 尼日利亚
    'NU': '+683',    # 纽埃
    'NF': '+672',    # 诺福克岛
    'MP': '+1',      # 北马里亚纳群岛
    'NO': '+47',     # 挪威
    'OM': '+968',    # 阿曼
    'PK': '+92',     # 巴基斯坦
    'PW': '+680',    # 帕劳
    'PS': '+970',    # 巴勒斯坦
    'PA': '+507',    # 巴拿马
    'PG': '+675',    # 巴布亚新几内亚
    'PY': '+595',    # 巴拉圭
    'PE': '+51',     # 秘鲁
    'PH': '+63',     # 菲律宾
    'PN': '+64',     # 皮特凯恩群岛
    'PL': '+48',     # 波兰
    'PT': '+351',    # 葡萄牙
    'PR': '+1',      # 波多黎各
    'QA': '+974',    # 卡塔尔
    'RE': '+262',    # 留尼汪
    'RO': '+40',     # 罗马尼亚
    'RU': '+7',      # 俄罗斯
    'RW': '+250',    # 卢旺达
    'BL': '+590',    # 圣巴泰勒米
    'SH': '+290',    # 圣赫勒拿、阿森松和特里斯坦-达库尼亚
    'KN': '+1',      # 圣基茨和尼维斯
    'LC': '+1',      # 圣卢西亚
    'MF': '+590',    # 法属圣马丁
    'PM': '+508',    # 圣皮埃尔和密克隆
    'VC': '+1',      # 圣文森特和格林纳丁斯
    'WS': '+685',    # 萨摩亚
    'SM': '+378',    # 圣马力诺
    'ST': '+239',    # 圣多美和普林西比
    'SA': '+966',    # 沙特阿拉伯
    'SN': '+221',    # 塞内加尔
    'RS': '+381',    # 塞尔维亚
    'SC': '+248',    # 塞舌尔
    'SL': '+232',    # 塞拉利昂
    'SG': '+65',     # 新加坡
    'SX': '+1',      # 荷属圣马丁
    'SK': '+421',    # 斯洛伐克
    'SI': '+386',    # 斯洛文尼亚
    'SB': '+677',    # 所罗门群岛
    'SO': '+252',    # 索马里
    'ZA': '+27',     # 南非
    'GS': '+500',    # 南乔治亚和南桑威奇群岛
    'SS': '+211',    # 南苏丹
    'ES': '+34',     # 西班牙
    'LK': '+94',     # 斯里兰卡
    'SD': '+249',    # 苏丹
    'SR': '+597',    # 苏里南
    'SJ': '+47',     # 斯瓦尔巴和扬马延
    'SZ': '+268',    # 斯威士兰
    'SE': '+46',     # 瑞典
    'CH': '+41',     # 瑞士
    'SY': '+963',    # 叙利亚
    'TW': '+886',    # 台湾
    'TJ': '+992',    # 塔吉克斯坦
    'TZ': '+255',    # 坦桑尼亚
    'TH': '+66',     # 泰国
    'TL': '+670',    # 东帝汶
    'TG': '+228',    # 多哥
    'TK': '+690',    # 托克劳
    'TO': '+676',    # 汤加
    'TT': '+1',      # 特立尼达和多巴哥
    'TN': '+216',    # 突尼斯
    'TR': '+90',     # 土耳其
    'TM': '+993',    # 土库曼斯坦
    'TC': '+1',      # 特克斯和凯科斯群岛
    'TV': '+688',    # 图瓦卢
    'UG': '+256',    # 乌干达
    'UA': '+380',    # 乌克兰
    'AE': '+971',    # 阿联酋
    'GB': '+44',     # 英国
    'US': '+1',      # 美国
    'UM': '+1',      # 美国本土外小岛屿
    'UY': '+598',    # 乌拉圭
    'UZ': '+998',    # 乌兹别克斯坦
    'VU': '+678',    # 瓦努阿图
    'VE': '+58',     # 委内瑞拉
    'VN': '+84',     # 越南
    'VG': '+1',      # 英属维尔京群岛
    'VI': '+1',      # 美属维尔京群岛
    'WF': '+681',    # 瓦利斯和富图纳
    'EH': '+212',    # 西撒哈拉
    'YE': '+967',    # 也门
    'ZM': '+260',    # 赞比亚
    'ZW': '+263',    # 津巴布韦'
}

def get_country_name(country_code):
    """根据国家代码获取中文国家名称"""
    if not country_code:
        return ""
    return COUNTRY_CODES_TO_NAMES.get(country_code.upper(), country_code)

def get_country_phone_prefix(country_code):
    """根据国家代码获取国际电话区号"""
    if not country_code:
        return ""
    return COUNTRY_CODES_TO_PHONE_PREFIX.get(country_code.upper(), "")

def format_phone_number(phone, country_code):
    """格式化手机号为国际格式"""
    if not phone:
        return ""
    
    # 获取国家区号
    country_prefix = get_country_phone_prefix(country_code)
    
    # 如果没有国家区号，返回原始号码
    if not country_prefix:
        return phone
    
    # 清理手机号，移除空格、括号、横线等字符，但保留+
    clean_phone = ''.join(filter(lambda x: x.isdigit() or x == '+', phone))
    
    # 如果已经是国际格式（以+开头）
    if clean_phone.startswith('+'):
        # 检查是否已经包含正确的国家代码
        prefix_digits = country_prefix[1:]  # 移除+号
        # 如果手机号以国家代码开头，直接使用
        if clean_phone[1:].startswith(prefix_digits):
            # 只保留国家代码后的数字部分
            clean_phone = clean_phone[1 + len(prefix_digits):]
        else:
            # 移除+号和其他可能的国家代码
            clean_phone = clean_phone[1:]
            # 移除可能的国家代码前缀
            if clean_phone.startswith(prefix_digits):
                clean_phone = clean_phone[len(prefix_digits):]
    else:
        # 对于非国际格式，移除可能的国家代码前缀
        prefix_digits = country_prefix[1:]  # 移除+号
        if clean_phone.startswith(prefix_digits):
            clean_phone = clean_phone[len(prefix_digits):]
    
    # 如果清理后的号码为空，返回原始号码
    if not clean_phone:
        return phone
    
    # 统一格式化规则：每3-4位数字添加一个空格分隔符
    formatted_number = ""
    length = len(clean_phone)
    
    if length <= 4:
        # 简单情况，直接返回
        formatted_number = clean_phone
    elif length <= 7:
        # 分为两组: 3-4, 剩余
        first_group = 3 if length in [6, 7] else min(4, length)
        formatted_number = f"{clean_phone[:first_group]} {clean_phone[first_group:]}"
    elif length <= 10:
        # 分为三组: 3, 3-4, 剩余
        first_group = 3
        remaining = length - first_group
        second_group = 3 if remaining in [6, 7] else min(4, remaining)
        formatted_number = f"{clean_phone[:first_group]} {clean_phone[first_group:first_group+second_group]} {clean_phone[first_group+second_group:]}"
    else:
        # 更长的号码，每3位分组
        parts = []
        for i in range(0, length, 3):
            parts.append(clean_phone[i:i+3])
        formatted_number = " ".join(parts)
    
    # 返回格式化的国际电话号码
    return f"{country_prefix} {formatted_number}".strip()


def format_phone_number_without_prefix(phone, country_code):
    """格式化手机号但不显示国家区号"""
    if not phone:
        return ""
    
    # 获取国家区号
    country_prefix = get_country_phone_prefix(country_code)
    
    # 清理手机号，移除空格、括号、横线等字符，但保留+
    clean_phone = ''.join(filter(lambda x: x.isdigit() or x == '+', phone))
    
    # 如果已经是国际格式（以+开头）
    if clean_phone.startswith('+'):
        # 检查是否已经包含正确的国家代码
        prefix_digits = country_prefix[1:]  # 移除+号
        # 如果手机号以国家代码开头，直接使用
        if clean_phone[1:].startswith(prefix_digits):
            # 只保留国家代码后的数字部分
            clean_phone = clean_phone[1 + len(prefix_digits):]
        else:
            # 移除+号和其他可能的国家代码
            clean_phone = clean_phone[1:]
            # 移除可能的国家代码前缀
            if clean_phone.startswith(prefix_digits):
                clean_phone = clean_phone[len(prefix_digits):]
    else:
        # 对于非国际格式，移除可能的国家代码前缀
        prefix_digits = country_prefix[1:]  # 移除+号
        if clean_phone.startswith(prefix_digits):
            clean_phone = clean_phone[len(prefix_digits):]
    
    # 如果清理后的号码为空，返回原始号码
    if not clean_phone:
        return phone
    
    # 统一格式化规则：每3-4位数字添加一个空格分隔符
    formatted_number = ""
    length = len(clean_phone)
    
    if length <= 4:
        # 简单情况，直接返回
        formatted_number = clean_phone
    elif length <= 7:
        # 分为两组: 3-4, 剩余
        first_group = 3 if length in [6, 7] else min(4, length)
        formatted_number = f"{clean_phone[:first_group]} {clean_phone[first_group:]}"
    elif length <= 10:
        # 分为三组: 3, 3-4, 剩余
        first_group = 3
        remaining = length - first_group
        second_group = 3 if remaining in [6, 7] else min(4, remaining)
        formatted_number = f"{clean_phone[:first_group]} {clean_phone[first_group:first_group+second_group]} {clean_phone[first_group+second_group:]}"
    else:
        # 更长的号码，每3位分组
        parts = []
        for i in range(0, length, 3):
            parts.append(clean_phone[i:i+3])
        formatted_number = " ".join(parts)
    
    # 返回格式化后的电话号码（不包含国家区号）
    return formatted_number.strip()